import java.util.InputMismatchException;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        try {
            int n = scanner.nextInt();
        } catch(InputMismatchException e) {
            e.printStackTrace();
            System.out.println("输入不匹配");
        } finally {
            System.out.println("执行了finally，一般用于关闭资源");
            scanner.close();
        }
    }

    //谁都有没有处理异常 此时交给jvm 声明异常
    public static void test2(int a) throws CloneNotSupportedException{
            if(a == 0) {
                throw new CloneNotSupportedException(); //抛出异常需要被接收 受查异常
            }
        }
    public static void main5(String[] args) throws CloneNotSupportedException { //要通过try catch处理异常
        test2(0);
        System.out.println(2);
    }

    public static void test1(int a) {
        try {
            if(a == 0) {                //抛出Exception默认时一个受查异常
                throw new CloneNotSupportedException(); //抛出异常需要被接收 受查异常
            }
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            System.out.println(1);
        }
    }
    public static void main4(String[] args) {
        test1(0);
        System.out.println(2);
    }
    public static void test(int a) {
        try {
        if(a == 0) {
            throw new NullPointerException(); //抛出异常需要被接收 运行时异常
            }
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }
    public static void main3(String[] args) {
        test(0);
    }
    public static void main2(String[] args) {
        try {
            System.out.println(10 / 0);
            System.out.println("saddf"); //不会执行
        } //catch(Exception e) {} Exception类是所有类的父类，此时后面子类没有存在的意义了 erro
          catch(ArithmeticException e) { //NullPointerException 这里没有去捕捉对应异常 最终这个异常交给jvm处理 程序立即终止
            e.printStackTrace(); //快速定位异常出现的位置
            System.out.println("你这里出现算数异常了！");
        } catch(NullPointerException e) {
            e.printStackTrace();
            System.out.println("空指针异常！");
        } catch(ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
            System.out.println("数组越界异常！");
        } //catch(Exception e) {}; //可以存在 兜底作用
    }

    public static void main1(String[] args) {
        //异常      所有异常就是一个具体的类
        /*int[] arr = {1, 2, 3};
        System.out.println(arr[100]);
        */

        //运行时异常 非受查异常
        //编译时异常 受查异常

        //处理异常
        //1.防御式异常
        //2.
        try {
            System.out.println(10 / 0);
            System.out.println("saddf"); //不会执行
        } catch(ArithmeticException e) { //NullPointerException 这里没有去捕捉对应异常 最终这个异常交给jvm处理 程序立即终止
            e.printStackTrace(); //快速定位异常出现的位置
            System.out.println("你这里出现算数异常了！");
        } catch(NullPointerException e) {
            e.printStackTrace();
            System.out.println("空指针异常！");
        } catch(ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
            System.out.println("数组越界异常！");
        }
        /*catch(Exception e) {
          e.printStackTrace(); //不建议这样写，因为无法只管看出什么异常 多态
         */

        System.out.println("执行后续代码");

    }

}
